﻿using System;
using System.Collections.Generic;
using System.Text;

namespace EnhSimGUI
{
    class Config
    {
        public string config_version{ get; set; }
        public int simulation_time { get; set; }
        public int simulation_time_combatlog { get; set; }
        public int combat_length { get; set; }
        public double combat_length_rng_factor { get; set; }
        public int report_count { get; set; }               
        public int threads { get; set; }                    
        public int min_lag { get; set; }                    
        public int max_lag { get; set; }                    
        public int simulate_mana { get; set; }              

        public int ep_precision { get; set; }                
        public string ep_base_stat { get; set; }             
        public int ep_ap { get; set; }                       
        public int ep_crit_rating { get; set; }              
        public int ep_hit_rating { get; set; }               
        public int ep_expertise { get; set; }                
        public int ep_haste_rating { get; set; }             
        public int ep_armor_penetration_rating { get; set; } 
        public int ep_spellpower { get; set; }               
        public double ep_dps { get; set; }                   
        public int ep_mana { get; set; }                     
        public int ep_spirit { get; set; }                   
        public int ep_mp5 { get; set; }                      

        public int mh_auto_attack { get; set; }               
        public int oh_auto_attack { get; set; }               
        public double wait_ss_with_wf_cd { get; set; }        
        public int cast_ll_only_if_wf_on_cd { get; set; }
        public int use_bloodlust { get; set; } 
        public int always_bloodlust_wolves { get; set; }            
        public int sync_bloodlust_with_trinkets { get; set; } 
        public double cast_lvb_only_if_ed_left { get; set; }  
        public int cast_lvb_only_if_fsdots_left { get; set; } 
        public int cast_lvb_only_if_fs_active { get; set; }   
        public int cast_fs_only_if_dots_left { get; set; }    
        public int cast_ls_only_if_charges_left { get; set; } 
        public int cast_sr_only_if_mana_left { get; set; }    
        public int cast_sr_on_cooldown { get; set; }          
        public int cast_magma_only_if_ticks_left { get; set; }
        public int use_mana_potion_if_mana_left { get; set; } 
        public int necrotic_touch { get; set; }               

        public int rotation_priority_count { get; set; }
        public string rotation_priority1 { get; set; } 
        public string rotation_priority2 { get; set; } 
        public string rotation_priority3 { get; set; } 
        public string rotation_priority4 { get; set; } 
        public string rotation_priority5 { get; set; } 
        public string rotation_priority6 { get; set; } 
        public string rotation_priority7 { get; set; } 
        public string rotation_priority8 { get; set; } 
        public string rotation_priority9 { get; set; } 
        public string rotation_priority10 { get; set; }
        public string rotation_priority11 { get; set; }

        public string fight_name { get; set; }
        public double miss { get; set; }      
        public double dodge { get; set; }     
        public double glancing { get; set; }  
        public int armor { get; set; }        
        public double spell_miss { get; set; }

        public int nature_resistance { get; set; } 
        public int fire_resistance { get; set; }   
        public int frost_resistance { get; set; } 
        public int arcane_resistance { get; set; } 
        public int shadow_resistance { get; set; } 

        public int additional_targets { get; set; }        
        public double additional_target_percent { get; set; }
        public int additional_target_level { get; set; }
        public int cast_cl_when_aoe { get; set; }       

        public double armor_debuff_major_min { get; set; }           
        public double armor_debuff_minor_min { get; set; }           
        public double physical_vulnerability_debuff_min { get; set; }
        public double melee_haste_buff_min { get; set; }             
        public double melee_crit_chance_buff_min { get; set; }       
        public int attack_power_buff_flat_min { get; set; }          
        public double attack_power_buff_multiplier_min { get; set; } 
        public double spell_haste_buff_min { get; set; }             
        public double spell_crit_chance_buff_min { get; set; }       
        public double spell_crit_chance_debuff_min { get; set; }     
        public double spell_damage_debuff_min { get; set; }          
        public int spellpower_buff_min { get; set; }                 
        public double spell_hit_chance_debuff_min { get; set; }      
        public double haste_buff_min { get; set; }                   
        public double percentage_damage_increase_min { get; set; }   
        public double crit_chance_debuff_min { get; set; }           
        public double stat_multiplier_min { get; set; }              
        public int stat_add_buff_min { get; set; }                   
        public int agi_and_strength_buff_min { get; set; }           
        public int intellect_buff_min { get; set; }

        public double armor_debuff_major_max { get { return 20.0; } }           
        public double armor_debuff_maxor_max { get { return 5.0; } }
        public double physical_vulnerability_debuff_max { get { return 4.0; } }
        public double melee_haste_buff_max { get { return 20.0; } }
        public double melee_crit_chance_buff_max { get { return 5.0; } }
        public int attack_power_buff_flat_max { get { return 688; } }
        public double attack_power_buff_multiplier_max { get { return 99.7; } }
        public double spell_haste_buff_max { get { return 5.0; } }
        public double spell_crit_chance_buff_max { get { return 5.0; } }
        public double spell_crit_chance_debuff_max { get { return 5.0; } }
        public double spell_damage_debuff_max { get { return 13.0; } }
        public int spellpower_buff_max { get { return 280; } }
        public double spell_hit_chance_debuff_max { get { return 3.0; } }
        public double haste_buff_max { get { return 3.0; } }
        public double percentage_damage_increase_max { get { return 3.0; } }
        public double crit_chance_debuff_max { get { return 3.0; } }
        public double stat_multiplier_max { get { return 10.0; } }
        public int stat_add_buff_max { get { return 52; } }
        public int agi_and_strength_buff_max { get { return 178; } }
        public int intellect_buff_max { get { return 60; } }                 

        public int replenishment { get; set; }       
        public int water_shield { get; set; }        
        public int mana_spring_totem { get; set; }   
        public int blessing_of_wisdom { get; set; }  
        public int judgement_of_wisdom { get; set; } 
        public int mixology { get; set; }            

        public string flask_elixir { get; set; }    
        public string guardian_elixir { get; set; } 
        public string potion { get; set; }          
        public string food { get; set; }            

        public string race { get; set; }              
        public double mh_speed { get; set; }          
        public double oh_speed { get; set; }          
        public double mh_dps { get; set; }            
        public double oh_dps { get; set; }            
        public double mh_crit { get; set; }           
        public double oh_crit { get; set; }           
        public double mh_hit { get; set; }            
        public double oh_hit { get; set; }            
        public int mh_expertise_rating { get; set; }  
        public int oh_expertise_rating { get; set; }  
        public int ap { get; set; }                   
        public double melee_haste { get; set; }       
        public double armor_penetration { get; set; } 
        public int str { get; set; }                  
        public int agi { get; set; }                  
        public int intellect { get; set; }                  
        public int spi { get; set; }                  
        public int spellpower { get; set; }           
        public double spell_crit { get; set; }        
        public double spell_hit { get; set; }         
        public double spell_haste { get; set; }       
        public int max_mana { get; set; }             
        public int mp5 { get; set; }                  

        public string mh_imbue { get; set; }   
        public string oh_imbue { get; set; }   
        public string mh_enchant { get; set; } 
        public string oh_enchant { get; set; } 
        public string mh_weapon { get; set; }  
        public string oh_weapon { get; set; }  
        public string trinket1 { get; set; }   
        public string trinket2 { get; set; }   
        public string totem { get; set; }          

        public string set_bonus1 { get; set; }     
        public string set_bonus2 { get; set; }     
        public string set_bonus3 { get; set; }     
        public string metagem { get; set; }        
        public string gloves_enchant { get; set; } 
        public string cloak_enchant { get; set; }
        public string ring_proc { get; set; }
        public string glyph_major1 { get; set; }   
        public string glyph_major2 { get; set; }   
        public string glyph_major3 { get; set; }   
        public string glyph_minor1 { get; set; }   
        public string glyph_minor2 { get; set; }   
        public string glyph_minor3 { get; set; }   

        public int ancestral_knowledge_min { get; set; }       
        public int improved_shields_min { get; set; }          
        public int mental_dexterity_min { get; set; }          
        public int shamanistic_focus_min { get; set; }         
        public int flurry_min { get; set; }                    
        public int elemental_weapons_min { get; set; }         
        public int unleashed_rage_min { get; set; }            
        public int weapon_mastery_min { get; set; }            
        public int dual_wield_specialization_min { get; set; } 
        public int mental_quickness_min { get; set; }          
        public int improved_stormstrike_min { get; set; }      
        public int static_shock_min { get; set; }              
        public int maelstrom_weapon_min { get; set; }          

        public int ancestral_knowledge_max { get { return 5; } }   
        public int improved_shields_max { get { return 3; } }         
        public int mental_dexterity_max { get { return 3; } }         
        public int shamanistic_focus_max { get { return 1; } }        
        public int flurry_max { get { return 5; } }                   
        public int elemental_weapons_max { get { return 3; } }        
        public int unleashed_rage_max { get { return 3; } }           
        public int weapon_mastery_max { get { return 3; } }           
        public int dual_wield_specialization_max { get { return 3; } }
        public int mental_quickness_max { get { return 3; } }         
        public int improved_stormstrike_max { get { return 2; } }     
        public int static_shock_max { get { return 5; } }             
        public int maelstrom_weapon_max { get { return 5; } }

        public int convection_min { get; set; }
        public int concussion_min { get; set; }
        public int call_of_flame_min { get; set; }
        public int elemental_devastation_min{ get; set; }
        public int reverberation_min{ get; set; }
        public int improved_fire_nova_min{ get; set; }
        public int elemental_focus_min{ get; set; }
        public int elemental_fury_min{ get; set; }
        public int call_of_thunder_min{ get; set; }
        public int unrelenting_storm_min{ get; set; }
        public int elemental_precision_min{ get; set; }
        public int lightning_mastery_min{ get; set; }
        public int elemental_oath_min{ get; set; }
        public int lightning_overload_min{ get; set; }
        public int lava_flows_min{ get; set; }
        public int storm_earth_and_fire_min{ get; set; }
        public int shamanism_min{ get; set; }
        
        public int convection_max { get { return 5; } }            
        public int concussion_max { get { return 5; } }            
        public int call_of_flame_max { get { return 3; } }         
        public int elemental_devastation_max { get { return 3; } } 
        public int reverberation_max { get { return 5; } }         
        public int improved_fire_nova_max { get { return 2; } }    
        public int elemental_focus_max { get { return 1; } }       
        public int elemental_fury_max { get { return 5; } }        
        public int call_of_thunder_max { get { return 1; } }       
        public int unrelenting_storm_max { get { return 3; } }     
        public int elemental_precision_max { get { return 3; } }   
        public int lightning_mastery_max { get { return 5; } }     
        public int elemental_oath_max { get { return 2; } }        
        public int lightning_overload_max { get { return 5; } }    
        public int lava_flows_max { get { return 3; } }            
        public int storm_earth_and_fire_max { get { return 3; } }  
        public int shamanism_max { get { return 5; } }             

        public Config()
        {
            // set all the default options
        }
    }
}
